package com.hxk.dao;

import java.util.List;

import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.Repository;

import com.hxk.pojo.User;
/**
 * 使用spring data jpa 接口Repository
 * 该Repository接口有两种实现方法
 * 1、通过命名规则方式
 * 2、通过@query注解
 * @author Cactus
 *
 */
public interface UserRepositoryDao extends Repository<User, Integer> {

	/**
	 * 通过命名规则方式实现
	 */
	/**基于方法名称命名规则查询
	 * 注：如findByUserNameIs中Name必须要和User实体对象属性一致
	 */
	List<User> findByNameIs(String name);
	
	List<User> findByNameLike(String name);
	
	List<User> findByNameAndAgeGreaterThanEqual(String name, Integer age);
	
	/**
	 * 基于@Query 注解查询
	 * 注：from User where name 中的 User 必须为实体对象 name 必须为实现对象User中的属性
	 */
	@Query("from User where name = ?")
	List<User> queryUserByNameUseJPQL(String name);
	
	@Query("from User where name like ?")
	List<User> queryUserByLikeNameUseJPQL(String name);
	
	@Query("from User where name = ? and age = ?")
	List<User> queryUserByNameAndAgeJPQL(String name, Integer age);
	
	/**
	 * 基于@Query 注解查询使用sql语句查询
	 * 注：select * from t_users where userName = ?
	 * 中的t_users必须为真实的表，userName为表的字段
	 */
	@Query(value="select * from t_user where name = ?",nativeQuery=true)
	List<User> queryUserByNameUseSQL(String userName);
	
	@Query(value="select * from t_user where name like ?", nativeQuery=true)
	List<User> queryUserByLikeNameUseSQL(String userName);
	
	@Query(value="select * from t_user where name = ? and age = ?", nativeQuery=true)
	List<User> queryUserByNameAndAgeSQL(String name, Integer age);
	
	//基于@Query 注解实现更新操作
	@Query("update User set age = ? where id = ?")
	@Modifying//此注解用于标识该语句为更新语句
	void updateUserAgeById(Integer age,Integer id);
	
}
